'''
数据背景：某班30名学生的语文、数学、英语三科期末考试成绩(满分150分），语文成绩：90-135分，中位数110，四分位数Q1=100、Q3=120，无异常值；
数学成绩：85-140分，中位数115，四分位数Q1=95、Q3=125，异常值145；英语成绩：80-130分，中位数105，四分位数Q1=90、Q3=115，无异常值。绘制
要求：在同一张图中绘制三科成绩的箱线图，以“科目”为X轴，“成绩”为Y轴，异常值用红色圆点标记，添加图表标题“语文、数学、英语成绩箱线图”。分析目
标：对比三科成绩的离散程度、中位数水平，识别数学成绩中的异常值情况。
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#1.读入数据
df=pd.DataFrame({
    '科目':['语文','数学','英语'],
    '成绩':[
        np.random.randint(90,136,30),
        np.random.randint(85,141,30),
        np.random.randint(80,131,30),
    ]
})
#2.创建画布
plt.figure(figsize=(10,6),dpi=100)
#3.绘制箱线图
box=plt.boxplot(
    df['成绩'],
    labels=df['科目'],
    # 显示异常值
    showfliers=True,
    #垂直显示
    vert=True,
    #箱体宽度
    widths=0.5,
    # 异常值样式
    flierprops=dict(marker='o',markerfacecolor='red',markersize=6,linestyle='none'),
    patch_artist=True,# 填充箱体颜色
    boxprops=dict(facecolor='lightblue',color='blue'),# 箱体颜色
    whiskerprops=dict(color='blue'),# 须线颜色
    capprops=dict(color='blue'),# 上限线颜色
    medianprops=dict(color='red'),# 中位数颜色
)
#4.设置属性
plt.title('箱线图',fontsize=16,fontweight='bold',pad=20)
plt.xlabel('类别',fontsize=12)
plt.ylabel('数值',fontsize=12)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.grid(True,alpha=0.3,linestyle='--')
#避免乱码
plt.rcParams['font.sans-serif']=['SimHei']
# 显示图表
plt.tight_layout
plt.show()
